package com.allen.study.domain.service;

import com.allen.study.common.base.DomainResponse;
import com.allen.study.domain.entity.SysRole;
import com.allen.study.domain.repository.ISysRoleRepo;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;

import javax.validation.constraints.NotNull;

/**
 * 角色表领域服务
 *
 * @author AllenSun
 * @since 2025-04-23 20:46
 */
@Service
@AllArgsConstructor
public class SysRoleService {

    /**
     * 角色表资源库
     */
    private final ISysRoleRepo sysRoleRepo;

    /**
     * 创建角色表
     *
     * @param sysRole 角色表实体
     * @return 响应结果
     */
    public DomainResponse<Void> create(@NotNull SysRole sysRole) {
        // 获取当前登录用户
        // SecurityUser securityUser = SecurityUserHelper.get();
        // 设置租户
        // sysRole.setTenantId(securityUser.getTenantId());

        // 保存角色表
        sysRoleRepo.create(sysRole);
        return DomainResponse.ok();
    }

    /**
     * 根据主键删除角色表
     *
     * @param sysRoleId 角色表主键
     * @return 响应结果
     */
    public DomainResponse<Void> deleteById(@NotNull String sysRoleId) {
        // 根据主键查询角色表
        SysRole sysRole = sysRoleRepo.queryById(sysRoleId);
        // 角色表数据存在且租户正确，删除角色表数据
        if (ObjectUtils.isNotEmpty(sysRole) && sysRole.checkTenant()) {
            sysRoleRepo.deleteById(sysRoleId);
        }
        return DomainResponse.ok();
    }

    /**
     * 根据主键更新角色表
     *
     * @param sysRole 角色表实体
     * @return 响应结果
     */
    public DomainResponse<Void> updateById(@NotNull SysRole sysRole) {
        // 根据主键查询角色表
        SysRole exists = sysRoleRepo.queryById(sysRole.getId());
        // 角色表数据存在且租户正确，更新角色表数据
        if (ObjectUtils.isNotEmpty(exists) && exists.checkTenant()) {
            sysRoleRepo.updateById(sysRole);
        }
        return DomainResponse.ok();
    }

    /**
     * 根据主键查询角色表
     *
     * @param sysRoleId 角色表主键
     * @return 响应结果
     */
    public DomainResponse<SysRole> queryById(@NotNull String sysRoleId) {
        SysRole sysRole = sysRoleRepo.queryById(sysRoleId);
        return DomainResponse.ok(sysRole);
    }
}
